package com.ssy.lingxi.product.service.customer;

import com.ssy.lingxi.common.constant.tree.Node;
import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.model.vo.SelectVO;
import com.ssy.lingxi.product.api.model.request.SimpleIdListRequest;
import com.ssy.lingxi.product.entity.customer.CustomerCategory;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 品类管理类
 * @author jw.chen
 * @version 2.0.0
 * @date 2020/6/22
 */
public interface ICustomerCategoryService {

    /**
     * 同步平台品类
     * @return
     */
    Boolean syncCategory(UserLoginCacheDTO sysUser, SimpleIdListRequest simpleIdListRequest);

    /**
     * 查询品类树
     * @return Wrapper<?>
     * @param rootNodeId
     */
    List<Node> getCustomerCategoryTree(UserLoginCacheDTO sysUser, Long rootNodeId);

    /**
     * 查询品类树--供应商
     * @param memberId 供应商id
     * @param memberRoleId 供应商角色id
     * @param rootNodeId 根节点的id,空代表查询全部
     * @return
     */
    List<Node> getMemberCustomerCategoryTree(Long rootNodeId, Long memberId, Long memberRoleId, Integer exludeType);

    /**
     * 查询属性
     * @param pageVO
     * @param name
     * @return Wrapper<?>
     */
    Page<CustomerCategory> getCustomerCategoryList(UserLoginCacheDTO sysUser, PageVO pageVO, String name);

    /**
     * 查询品类
     * @param CustomerCategoryId
     * @return Wrapper<?>
     */
    CustomerCategory getCustomerCategory(Long CustomerCategoryId);

    /**
     * 添加/修改品类
     * @param CustomerCategory
     * @return
     */
    String saveOrUpdateCustomerCategory(UserLoginCacheDTO sysUser, CustomerCategory CustomerCategory);

    /**
     * 删除品类
     * @param CustomerCategoryId
     * @return
     */
    String deleteCustomerCategory(UserLoginCacheDTO sysUser, Long CustomerCategoryId);

    /**
     * 查询品类下拉框 -- 商品能力
     * @param name 品类名称
     * @return
     */
    List<SelectVO> getSelectCustomerCategory(Long memberId, Long memberRoleId, String name);

    /**
     * 查询品类下拉框 -- 当前会员
     * @param name 品类名称
     * @return
     */
    List<SelectVO> getCustomerCategory(Long memberId, Long memberRoleId, String name);

    /**
     * 查询会员品类最大级别
     * @return
     */
    Integer getMaxCustomerCategory(UserLoginCacheDTO sysUser);

    /**
     * 根据等级查询会员品类
     * @param parentId
     * @return
     */
    List<SelectVO> getCustomerCategoryByParentId(UserLoginCacheDTO sysUser, Long parentId);

    /**
     * 通过fullId查找完整名称(包括所有父级节点名称)
     * @param fullId
     * @return
     */
    String getFullNameByFullId(String fullId);

    /**
     * 初始化到redis
     */
    void initToRedis();

    /**
     * 通过后台品类id查询会员信息
     */
    List<Long> getMemberIdList(Long id);

    /**
     * 通过会员id查询品类
     * @param memberIdList
     * @return
     */
    List<CustomerCategory> getCustomerCategoryByMemberId(List<Long> memberIdList);

    /**
     * 通过会员id和会员角色id查询品类
     * @param memberIdList
     * @return
     */
    List<CustomerCategory> getCustomerCategoryByMemberIdAndMemberRoleId(List<Long> memberIdList, List<Long> memberRoleIdList);

    /**
     * 通过id查询分类
     * @param idList
     * @return
     */
    List<CustomerCategory> getCustomerCategoryByIdList(List<Long> idList);

    /**
     * 查询当前会员所有品类的名称
     * @return 品类名称集合
     */
    List<String> getCustomerCategoryNameList(UserLoginCacheDTO sysUser);
}
